package essential.ch3;

/**
 * @Date 2021/10/23
 * @Created by Jonathan
 * 父类对象与子类对象之间进行相等比较
 */
public class PencilBox extends Box {
    private String brand;

    public PencilBox(int batch, String brand) {
        super(batch);
        this.brand = brand;
    }

    /**
     * 如果batch和brand都相等则返回true 否则返回false
     * 但是，如果PencilBox与Box具有相同的批次，则认为二者是相等的。
     * 这样一来，父类对象与子类对象的混合相等比较不符合equals方法对称性这一点
     *
     * @param o 待比较的对象
     * @return
     */
    @Override
    public boolean equals(Object o) {
        if (o instanceof PencilBox) {
            PencilBox p = (PencilBox) o;
            return super.equals(p) && this.brand == ((PencilBox) o).brand;
        }
        // 不是PencilBox类型的话 可以看是不是父类的类型 交给父类
        return super.equals(o);
    }


    public static void main(String[] args) {
        Box box = new Box(1);
        PencilBox pencilBox = new PencilBox(1, "A");
        System.out.print("对称性:");
        System.out.printf("%s ", box.equals(pencilBox));
        System.out.printf("%s ", pencilBox.equals(box));
        System.out.println();
    }
}
